// 1.引入express框架
const express = require('express');
// 2.引入路径模块
const path = require('path');
const formidable = require('formidable');
// const bodyParser = require('body-parser');
// 3.创建应用对象
const app = express();
// 静态资源访问服务功能
// app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
// 拦截所有请求实现跨域
app.use((req, res, next) => {
        // 允许所有的客户端访问
        res.header('Access-Control-Allow-Origin', '*');
        // 允许客户端通过哪些请求方法访问我
        res.header('Access-Control-Allow-Methods', 'get,post');
        //允许客户端发送跨域请求时携带cookie信息
        res.header('Access-Control-Allow-Credentials', true);
        next();
    })
    // 请求参数
app.all('/first', (req, res) => {
        res.send(req.query);
    })
    // ajax函数封装
app.all('/package', (req, res) => {
        res.send('hello ajax package');
    })
    // 验证邮箱唯一性
app.all('/email', (req, res) => {
        // res.setHeader('Access-Control-Allow-Origin', '*');
        const data = {
            info: '该邮箱符合规范，请放心使用！',
            msg: '邮箱已经注册过了，请注册其他邮箱！'
        }
        res.send(JSON.stringify(data));
    })
    // 搜索框内容自动提示
app.all('/search', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    const data = [
        '这是第一个内容',
        '这是第二个内容',
        '这是第三个内容',
        '这是第四个内容',
        '这是第五个内容',
    ]
    res.send(JSON.stringify(data));
})
app.post('/formData', (req, res) => {
        // 创建formidable表单解析对象
        const form = new formidable.IncomingForm();
        // 解析客户端传递过来的formData对象
        form.parse(req, (err, fields, files) => {
            res.send(fields);
        })
    })
    // 文件上传路由
app.post('/upload', (req, res) => {
        // 创建formidable表单解析对象
        const form = new formidable.IncomingForm();
        // 设置客户端上传文件的存储路径
        form.uploadDir = path.join(__dirname, 'public', 'uploads');
        // 保留上传文件的后缀
        form.keepExtensions = true;
        // 解析客户端传递过来的formData对象
        form.parse(req, (err, fields, files) => {
            // 将客户端传递过来的文件地址响应到客户端
            // C:\Users\USER\Desktop\Ajax\public\uploads\upload_b41e65a0d0a96322ae8aed01567786bf.jpg
            res.send({
                path: files.attrName.path.split('public')[1]
            });
        })
    })
    // jsonp代码优化
app.get('/better', (req, res) => {
    //接收客户端传递过来的函数的名称
    // const fnName = req.query.callback;
    // //将函数名称对应的函数调用代码返回给客户端
    // const data = JSON.stringify({ name: "张三" });
    // const result = fnName + '(' + data + ')';
    // res.send(result);
    res.jsonp({ name: "张三", age: 18 });
});
// 登录
app.post('/login', (req, res) => {
    const form = new formidable.IncomingForm();
    form.parse(req, (err, fields, file) => {
        const { username, password } = fields;
        if (username == 'itheima' && password == '123456') {
            // req.session.isLogin = true;
            res.send({ message: '登录成功！' });
        } else {
            res.send({ message: '登陆失败，用户名或密码错误！' });
        }
    })
});
// 检测登录状态
app.get('/check', (req, res) => {
    res.send({ message: '处于登录状态' });
});
// jsonp请求
app.get('/jsonp', (req, res) => {
    // 接收客户端传递过来的函数的名称
    const fnName = req.query.callback;
    //将函数名称对应的函数调用代码返回给客户端
    const result = fnName + '({ name: "admin" })';
    res.send(result);
    // res.jsonp({ name: 'admin', age: 100 });
});
app.listen(8000, () => {
    console.log('服务已经启动, 8000 端口监听中...')
})